import { ApiProperty } from "@nestjs/swagger";
import { Transform, Type } from "class-transformer";
import { IsIn, IsInt, IsNumber, IsOptional, Matches, Min } from "class-validator";


// 若参数未传，使用默认值 page=1 和 limit=10。
// 若参数传入且有效（如 page=2），则覆盖默认值。
// 若参数传入但无效（如 page=0），触发 @Min(1) 错误
export class PaginatedDto {
    @ApiProperty({ example: '1', description: '第几页,默认第一页' })
    @IsOptional()
    @Type(() => Number)
    @IsInt()
    @Min(1)
    page: number = 1; // 默认第一页

    @ApiProperty({ example: '10', description: '每页多少条数据,默认10' })
    @IsOptional()
    @Type(() => Number)
    @IsInt()
    @Min(1)
    limit: number = 10; // 默认每页10条

    @ApiProperty({ example: 'id', description: '按哪个字段排序' })
    @IsOptional()
    @IsIn(['id'])
    orderBy: string = 'id'; // 默认按 id 排序

    @ApiProperty({ example: 'desc', description: '升序asc/降序desc,默认desc' })
    @IsOptional()
    @Matches(/^(asc|desc)$/i)
    orderDirection: string = 'desc'; // 默认降序
}